iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
自我挑戰組

ABAP 基礎30天學習筆記系列 第 24

Day24_Business Object 介紹

  • 分享至 

  • xImage
  •  

原文連結:Analyzing a Business Object

Business Object

在ABAP RESTful API 模型中,Business Object(BO)被用來定義特定的實體,例如一家旅行社。BO的定義分成兩個部分:

  1. 一或多個CDS視圖,用來定義物件的structure與包含欄位
  2. 行為定義(behavior definition),描述我們能對物件做的事

https://ithelp.ithome.com.tw/upload/images/20240919/20113802JCZ2C3PqPx.png

行為定義(behavior definition )包含了如增刪改查等的基本操作,亦可定義validation、determination及action的方式,validation會在新增或變更資料時檢查正確性,determination則是會根據觸發條件修改BO實體,action則包含了非基本操作的客製化行為,例如核准採購單或取消航班等。

行為實例(behavior implementation) 由一或多個class組成,為前述validation、determination及action的實例化。而其中的基本操作可分成兩種情境:非管理(unmanaged)與管理(managed)情境,非管理情境中的增刪改查會在行為實例中就先建立實例,管理情境則是在運行時才處理。

BO通常用來為Fiori app 或 web API提供商業邏輯與功能,但也可以透過Entity Manipulation Language (EML)來從ABAP中存取BO,這是一系列可讓你用BO來增刪改查的ABAP語法。

EML還能讓你在BO中的行為實例中存取應用程式資料。

在這章將透過建立一個class,並用BO來修改之中的旅行社資料,其CDS視圖將包含key field AgencyID,以及其他關於旅行社的諸多欄位。

行為定義與實例化

https://ithelp.ithome.com.tw/upload/images/20240919/20113802sfIwPsMPZq.png

行為定義區段負責定義有哪些事是BO能做的,而行為實例則是運行時實際會跑的程式碼。

行為實例是一個class,透過managed implementation in class <class> unique來進行宣告,而行為實例則會寫在全域類別的區域類別。

行為定義

https://ithelp.ithome.com.tw/upload/images/20240919/20113802D0dN07uT2f.png
行為定義在BO中是必要的,包含了前述的增刪改查及validation等,在上圖中以旅行社為例,可以看到CDS view 名稱/DMO/R_AgencyTP 以及其別名/DMO/Agency,之後EML都會透過這個別名來尋址。

行為定義也會連結CDS與資料表,BO會使用兩張表,活動資料與草稿(未檢查的不完整資料),包含資料鎖定、檢查授權等資訊。

本章並不會深入探討這些資訊,只需要知道BO於運行時會一並處理上述議題即可,並且這些都可以根據資料表定義自動產生。

行為實例

https://ithelp.ithome.com.tw/upload/images/20240919/20113802UQUS6amDlU.png
在行為實例中的全域類別,只是一個在名稱後帶有特殊關鍵字FOR BEHAVIOR OF的空類別,實際實例則定義在區域類別中,可以點Local Types選單查看。

實例中包含了BO的主要程式碼,例如前述的validation、determination及action,而是否包含增刪改查等基本操作,則取決於行為定義時的資訊。例如,當使了會於運行時才處理增刪改查的管理類型(managed)情境,就不用額外於實例中定義基本操作。

https://ithelp.ithome.com.tw/upload/images/20240919/20113802QW83vPfmWM.png

舉例而言,validation會在運行時檢查資料是否被改變,如上例,當新資料創建時會由左側create觸發,如果既存的資料被改變則由field Name觸發驗證。

validation寫在行為定義之中(左),每個validation都有相對應的method(右)。validation與determination需要手動添加,其撰寫方式會在更後面的天數中提及,敬請期待。

原文中有檢視內建BO的流程影片,有興趣的可以去上方連結看。

BO Projections 與 BO Interfaces

https://ithelp.ithome.com.tw/upload/images/20240919/20113802S2PmUtsBh8.png
在ABAP RESTful 應用中,主要有兩種存取BO的工具:

  • 透過Business Service,例如SAP Fiori 中的OData UI 服務。
  • 在ABAP程式碼內,則使用前述的特殊語言Entity Manipulation Language (EML)。

於存取技術而言,直接存取BO雖然可行,但一般都是強烈建議應使用BO Projections 與 BO Interfaces來存取:
https://ithelp.ithome.com.tw/upload/images/20240919/20113802QAMvBQameC.png

  • BO Projection
    服務需要在BO定義該服務的相關投影(Projection),BO Projections 定義了BO中的那些資料與操作可由此服務取得,並可包含特定服務的行為定義與實作。BO Projection直接基於BO或由BO Interface建立。

  • BO Interface
    提供穩定存取BO資料與操作的管道,通常Interface會在其他軟體中被發布及使用。如果BO 中存在BO Interface,則需要使用EML來存取該介面。

BO Projection與BO Interface都具有和BO相似的結構:一到多個CDS view以及行為定義。區分這兩者簡單方式就是觀察兩者的行為定義,分別以projectioninterface作為開頭。

而兩者的CDS view都是 CDS Projection Views。相異於原始CDS view使用as select from,定義上則會加上as projection on字段。

並且projection中,會在視圖名稱後方分別加上:

  • 加上provider contract transactional_interface 在BO Interface名稱後。
  • 加上provider contract transactional_query 在BO Projection名稱後。

另外在命名規則上,也有以下規定:

  • BO Projection:<namespace>C_<…>
  • BO Interface:<namespace>I_<…>
  • BO Definition:<namespace>R_<…>

明天來介紹如何使用EML!


上一篇
Day23_Internal Table 與 ABAP SQL、UNION
下一篇
Day25_EML語法 & BO資料匯入、回傳與更新
系列文
ABAP 基礎30天學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言